const { prisma } = require('../config/prisma');
const ChatGroup = require('../models/ChatGroupPrisma');

/**
 * 中国各省份和特别行政区数据
 */
const provinces = [
  // 直辖市
  { name: '北京', code: '110000', type: '直辖市' },
  { name: '天津', code: '120000', type: '直辖市' },
  { name: '上海', code: '310000', type: '直辖市' },
  { name: '重庆', code: '500000', type: '直辖市' },
  
  // 省份
  { name: '河北', code: '130000', type: '省' },
  { name: '山西', code: '140000', type: '省' },
  { name: '辽宁', code: '210000', type: '省' },
  { name: '吉林', code: '220000', type: '省' },
  { name: '黑龙江', code: '230000', type: '省' },
  { name: '江苏', code: '320000', type: '省' },
  { name: '浙江', code: '330000', type: '省' },
  { name: '安徽', code: '340000', type: '省' },
  { name: '福建', code: '350000', type: '省' },
  { name: '江西', code: '360000', type: '省' },
  { name: '山东', code: '370000', type: '省' },
  { name: '河南', code: '410000', type: '省' },
  { name: '湖北', code: '420000', type: '省' },
  { name: '湖南', code: '430000', type: '省' },
  { name: '广东', code: '440000', type: '省' },
  { name: '海南', code: '460000', type: '省' },
  { name: '四川', code: '510000', type: '省' },
  { name: '贵州', code: '520000', type: '省' },
  { name: '云南', code: '530000', type: '省' },
  { name: '陕西', code: '610000', type: '省' },
  { name: '甘肃', code: '620000', type: '省' },
  { name: '青海', code: '630000', type: '省' },
  { name: '台湾', code: '710000', type: '省' },
  
  // 内蒙古自治区
  { name: '内蒙古', code: '150000', type: '自治区' },
  
  // 自治区
  { name: '广西', code: '450000', type: '自治区' },
  { name: '西藏', code: '540000', type: '自治区' },
  { name: '宁夏', code: '640000', type: '自治区' },
  { name: '新疆', code: '650000', type: '自治区' },
  
  // 特别行政区
  { name: '香港', code: '810000', type: '特别行政区' },
  { name: '澳门', code: '820000', type: '特别行政区' }
];

/**
 * 创建省份群聊
 */
async function createProvinceGroups() {
  console.log('开始创建省份群聊...');
  
  let successCount = 0;
  let errorCount = 0;
  const errors = [];
  
  // 首先创建全国总群
  try {
    console.log('创建全国总群...');
    const nationalGroup = await ChatGroup.create({
      group_name: '全国总群',
      group_avatar: null,
      description: '欢迎来到全国总群！这里汇聚了来自全国各地的朋友，大家可以在这里交流分享，讨论各地的风土人情。让我们一起打造一个和谐友好的交流平台！',
      group_type: 'group'
    });
    console.log(`✅ 全国总群创建成功，ID: ${nationalGroup.id}`);
    successCount++;
  } catch (error) {
    console.error('❌ 全国总群创建失败:', error.message);
    errors.push({ name: '全国总群', error: error.message });
    errorCount++;
  }
  
  // 创建各省份群聊
  for (const province of provinces) {
    try {
      console.log(`创建${province.name}${province.type}群聊...`);
      
      const groupName = `${province.name}${province.type === '省' ? '省' : province.type}`;
      const description = `欢迎来到${groupName}群！这里是${province.name}老乡们的交流聚集地，无论您是${province.name}本地人还是在${province.name}工作生活的朋友，都欢迎您的加入。让我们一起分享${province.name}的美好，交流生活经验，互帮互助！`;
      
      const group = await ChatGroup.create({
        group_name: groupName,
        group_avatar: null,
        description: description,
        group_type: 'group'
      });
      
      console.log(`✅ ${groupName}创建成功，ID: ${group.id}`);
      successCount++;
      
    } catch (error) {
      console.error(`❌ ${province.name}${province.type}创建失败:`, error.message);
      errors.push({ name: `${province.name}${province.type}`, error: error.message });
      errorCount++;
    }
  }
  
  console.log('\n=== 创建结果汇总 ===');
  console.log(`✅ 成功创建: ${successCount} 个群聊`);
  console.log(`❌ 创建失败: ${errorCount} 个群聊`);
  
  if (errors.length > 0) {
    console.log('\n失败详情:');
    errors.forEach(error => {
      console.log(`- ${error.name}: ${error.error}`);
    });
  }
  
  console.log('\n脚本执行完成！');
  
  // 关闭数据库连接
  await prisma.$disconnect();
  
  return {
    success: successCount,
    errors: errorCount,
    details: errors
  };
}

/**
 * 检查是否已存在相同名称的群聊
 */
async function checkExistingGroups() {
  console.log('检查已存在的群聊...');
  
  const allGroupNames = ['全国总群', ...provinces.map(p => `${p.name}${p.type === '省' ? '省' : p.type}`)];
  
  const existingGroups = await prisma.chat_groups.findMany({
    where: {
      group_name: {
        in: allGroupNames
      },
      group_type: 'group'
    },
    select: {
      id: true,
      group_name: true
    }
  });
  
  if (existingGroups.length > 0) {
    console.log(`发现 ${existingGroups.length} 个已存在的群聊:`);
    existingGroups.forEach(group => {
      console.log(`- ${group.group_name} (ID: ${group.id})`);
    });
    console.log('');
  } else {
    console.log('未发现重名群聊，可以安全创建。');
  }
  
  return existingGroups;
}

/**
 * 主函数
 */
async function main() {
  try {
    console.log('🚀 省份群聊批量创建工具');
    console.log('===========================');
    
    // 检查现有群聊
    const existingGroups = await checkExistingGroups();
    
    if (existingGroups.length > 0) {
      console.log('⚠️  发现已存在的群聊，请手动确认是否要继续创建（可能会创建重复的群聊）');
      console.log('如果要继续，请在10秒内按任意键，否则程序将自动退出...');
      
      // 简单的用户确认机制（在真实环境中你可能需要更完善的交互）
      setTimeout(() => {
        console.log('⏰ 超时退出，未创建任何群聊');
        process.exit(0);
      }, 10000);
      
      // 如果需要继续，注释掉上面的setTimeout
    }
    
    // 开始创建
    const result = await createProvinceGroups();
    
    process.exit(result.errors === 0 ? 0 : 1);
    
  } catch (error) {
    console.error('💥 程序执行失败:', error);
    process.exit(1);
  }
}

// 如果直接运行此脚本，则执行main函数
if (require.main === module) {
  main();
}

module.exports = {
  createProvinceGroups,
  checkExistingGroups,
  provinces
};